{\rtf0\ansi{\fonttbl\f0\fmodern Courier;\f1\ftech Symbol;\f2\fmodern Ohlfs;}
\margl40
\margr40
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\i0\ulnone\fs24\fc0\cf0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//
\i 	
\b FILENAME
\b0 :	
\b\i0 eText.Annotation.m\

\b0 //
\i 	
\b SUMMARY
\b0 :	
\b\i0 Implementation of interactions between eText and Annotations
\b0 \
//	
\b\i CATEGORY
\b0 :
\i0 	
\b Annotation
\b0 \
//	
\b\i PROTOCOLS
\b0 :
\i0 	
\b Uses <Annotation>
\b0 \
//	
\b\i INTERFACE
\b0 :
\i0 	
\b None
\b0 \
//	
\b\i AUTHOR
\b0 :		
\b\i0 Rohit Khare
\b0 \
//	
\b\i COPYRIGHT
\b0 :	
\f1\i0 с
\f0\b 1993,94 California Institure of Technology, eText Project\

\b0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b\i Implementation Comments
\b0\i0 \
//		These methods are "syntactic sugar" to replace NeXT's cell terminology. \
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b\i History
\b0\i0 \
//	11/26/94:	
\b Added -runForAnnotation.
\b0 \
//	10/17/94:	
\b Cleaned up for eText5.
\b0 \
//	08/05/94:	
\b Completely Rearchitected for 5.0. RK
\b0 \
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Imported Interfaces
\b0 \
//\
	#import "
\b eText.Annotation.h
\b0 "\
\

\i @implementation eText(Annotation)\

\i0 //ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Embedding Annotations
\b0 \
//\
- 
\b insertAnnotation
\b0 :theAnnotation \{\
	int 	
\b from
\b0  = sp0.cp;\
\
	if (
\b !
\b0 [self 
\b isEditable
\b0 ]) return 
\b nil
\b0 ;\
	[self 
\b undoSelChange
\b0 :"
\b Insert Annotation
\b0 "];\
	[self 
\b replaceSelWithAnnotation
\b0 :theAnnotation];\
	[self 
\b undoAffectedRange
\b0 :from 
\b to
\b0 :from+1];\
	[self 
\b touch
\b0 ];\
	return self;\
\}\
\
- 
\b replaceSelWithAnnotation
\b0 :theAnnotation \{\
	[self 
\b replaceSelWithCell
\b0 :theAnnotation];\
	return self;\
\}\
\
//ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп\
//	
\b Locating Annotations
\b0 \
//\
- (
\b int
\b0 ) 
\b positionForAnnotation
\b0 :theAnnotation \{\
	int 	pos,k,N;\
	
\b NXRun
\b0  	*
\b curr
\b0 ;\
	\
	if (theAnnotation == 
\b nil
\b0 ) return 
\b -1
\b0 ;\
	pos=0;\
	
\b N
\b0  = theRuns->chunk.
\b used
\b0 /sizeof(
\b NXRun
\b0 );\
	
\b curr
\b0  = theRuns->
\b runs
\b0 ;\
	for (k=0; k < N; k++) \{\
		if (curr->
\b info
\b0  == 
\b theAnnotation
\b0 ) return 
\b pos
\b0 ;\
		
\b pos
\b0  
\b +=
\b0  curr->
\b chars
\b0 ;\
		curr++;\
	\}\
	return 
\b -1
\b0 ;\
\}\
\
- (
\b NXRun *
\b0 ) 
\b runForAnnotation
\b0 :theAnnotation \{\
	int 	k,N;\
	
\b NXRun
\b0  	*
\b curr
\b0 ;\
	\
	if (theAnnotation == 
\b nil
\b0 ) return 
\b NULL
\b0 ;\
	
\b N
\b0  = theRuns->chunk.
\b used
\b0 /sizeof(
\b NXRun
\b0 );\
	
\b curr
\b0  = theRuns->
\b runs
\b0 ;\
	for (k=0; k < N; k++) \{\
		if (curr->
\b info
\b0  == 
\b theAnnotation
\b0 ) return 
\b curr
\b0 ;\
		curr++;\
	\}\
	return 
\b NULL
\b0 ;\
\}\

\i @end
}
